package inge_soft.gestoriusNuevo.business.controller.validation;

import java.util.Map;

import org.zkoss.bind.Property;
import org.zkoss.bind.ValidationContext;
import org.zkoss.bind.validator.AbstractValidator;

/* YA NO SE USA MAS */
public class FormValidator extends AbstractValidator {

	private final int minimo = 8;

	public void validate(ValidationContext ctx) {
		// all the bean properties
		Map<String, Property> beanProps = ctx.getProperties(ctx.getProperty().getBase());
		
		validateVacios(ctx, (String) beanProps.get("contrasenia").getValue(),
				(String) ctx.getValidatorArg("retypedPassword"),
				(String) beanProps.get("mail").getValue(), (String) beanProps.get("nick").getValue(),
				(String) beanProps.get("nombre").getValue(), (String) beanProps.get("apellido").getValue(),
				(String) beanProps.get("numeroDocumento").getValue());
		validateNick(ctx, (String) beanProps.get("nick").getValue());
		validatecontrasenias(ctx, (String) beanProps.get("contrasenia").getValue(),
				(String) ctx.getValidatorArg("retypedPassword"));
		validateNombreApellido(ctx,
				(String) beanProps.get("nombre").getValue(), (String) beanProps.get("apellido").getValue());

		validatemail(ctx, (String) beanProps.get("mail").getValue());
		/*
		 * validateCaptcha(ctx, (String) ctx.getValidatorArg("captcha"),
		 * (String) ctx.getValidatorArg("captchaInput"));
		 */
	}

	private void validateVacios(ValidationContext ctx, String contrasenia,
			String retype, String mail, String nick, String nombre,
			String apellido, String numeroDocumento) {
		if (contrasenia == null || retype == null || mail == null
				|| nick == null || nombre == null || apellido == null
				|| numeroDocumento == null) {
			this.addInvalidMessage(ctx, "nick","Se deben ingresar todos los campos obligatorios [*]");
		}

	}

	private void validatecontrasenias(ValidationContext ctx, String contrasenia,
			String retype) {

		if (contrasenia == null || retype == null || (!contrasenia.equals(retype))) {
			this.addInvalidMessage(ctx, "contrasenia","Las contrase�as no coinciden!");
		} else {
			if (contrasenia.length() < minimo) {
				this.addInvalidMessage(ctx, "contrasenia","Debe contener 8 caracteres minimos!");
			}
		}

	}

	/*
	 * Ante la solicitud de un registro, el sistema mostrara un formulario con
	 * los datos datos obligatorios: - nombre y apellido - e-mail - tipo y
	 * numero de documento - contrase�a datos no obligatorios: - e-mail
	 * mailAlternativo - nacionalidad - domicilio - telefono - empresa o institucion
	 * a la que pertenece - ocupacion fecha - fecha nacimiento
	 */

	private void validateNick(ValidationContext ctx, String nick) {
		if (nick.length() < minimo) {
			this.addInvalidMessage(ctx, "nick","Debe contener 8 caracteres minimos!");

		}

	}

	private void validateNombreApellido(ValidationContext ctx, String nombre,
			String apellido) {

	}

	private void validatemail(ValidationContext ctx, String mail) {
		if (mail == null || !mail.matches(".+@.+\\.[a-z]+")) {
			this.addInvalidMessage(ctx, "mail","Por favor ingrese un mail verdadero!");
			return;
		}
		// DaoUsuario dao = new DaoUsuario();
		// if
	}

	private void validateCaptcha(ValidationContext ctx, String captcha,
			String captchaInput) {
		if (captchaInput == null || !captcha.equals(captchaInput)) {
			this.addInvalidMessage(ctx, "captcha", "The captcha doesn't match!");
		}
	}

}
